<?php

class AssistidosController extends AppController {
	var $name = 'Assistidos';
	var $components = array ('Pagination','Upload');
	var $helpers = array('Html','Form','Accessibility','Pagination','Ajax','JavaScript','Input');


	function index() {
		$title = 'Assistidos';
		$this->set('title', $title);
		$this->set('pageTitle', $title);

		$conditions = array();
		$organizationsConditions = array();
		$unitConditions = array();

		// Permissao: se pode visualizar todas as unidades
		$group = $this->othAuth->getData('group');
		$level =$group['level'];
		$unitUser = $this->othAuth->getData('unit');

		// Filter for present only employee from an organization
		$where = '';
		if ($level < 100) {  // system admin
			$where .= '';
		} elseif ($level < 200) {
			$where .= ' AND Unit.organization_id ='.$unitUser['0']['Organization']['id'];
		} elseif ($level < 300) {
			$where .= ' AND ( 0';
			foreach($unitUser as $unitUser_i) {
				$where .= ' OR Unit.id = '.$unitUser_i['id'];

			}
			$where .= ')';
		}

		// Filter for present only employee from an organization
		$assistidos = $this->Assistido->query(
			'SELECT DISTINCT Assistido.id, Assistido.nome, Assistido.unit_id'.
			' FROM assistidos as Assistido'.
			' INNER JOIN units as Unit ON Assistido.unit_id = Unit.id'.
			' WHERE 1 = 1 '.$where
		);
		$assistidos_count = count($assistidos);
		for ($i=0; $i<$assistidos_count; $i++) {
			if (isset($assistidos[$i]['Assistido']['unit_id'])) {
				$unit = $this->Assistido->Unit->findById($assistidos[$i]['Assistido']['unit_id']);
				$assistidos[$i]['Unit'] = $unit['Unit'];
			}

		}
		$this->set('assistidos', $assistidos);
	}

	function view( $id=null ) {
		if (!$id) $this->redirect('/assistidos');

		$title = 'Visualizar assistido';
		$this->set('title', $title);
		$this->set('pageTitle', $title);

		$this->Assistido->id = $id;
		$this->set('assistido', $this->Assistido->read());
	
		$conditions = array();

		$formulario = new Formulario();
		$group = $this->othAuth->getData('group');
		$level =$group['level'];
		$unitUser = $this->othAuth->getData('unit');
		if ($level >= 100) {  // not system admin
			$conditions[] = array("organization_id"=>$unitUser['0']['Organization']['id']);
		}
		$this->set('formularios',$formulario->find('all',array('conditions'=>$conditions)));

		$conditions = array('assistido_id'=>$id);

		/* Carregando os valores */
		$fvalores = array();
		$fvalor_t = $this->Assistido->Fvalor->find('all',array('conditions'=>$conditions));
		$images_types = array('jpg','jpeg','gif','png');

		foreach ($fvalor_t as $fv) {

			if ($fv['Fcampo']['type'] == 'file') {
				if (in_array($this->Upload->ext($fv['Fvalor']['string']),$images_types)) {
					$extension = $this->Upload->ext($fv['Fvalor']['string']);
					$fv['Fvalor']['image'] = true;
					$fv['Fvalor']['realname'] = 'assist_'.$id.'_'.$fv['Fcampo']['id'].'.'.$extension;
				}
			}

			$fvalores[$fv['Fcampo']['id']] = $fv;
		}
		$fvalort_t = $this->Assistido->Fvalortext->find('all',array('conditions'=>$conditions));
		foreach ($fvalort_t as $fv) {
			$fvalores[$fv['Fcampo']['id']] = $fv;
		}

		$this->set('Fvalores',$fvalores);
	}

	function add() {
		$title = 'Cadastrar assistido';
		$this->set('title', $title);
		$this->set('pageTitle', $title);

		$conditions = array();

		$formulario = new Formulario();
		$group = $this->othAuth->getData('group');
		$level =$group['level'];
		$unitUser = $this->othAuth->getData('unit');
		if ($level >= 100) {  // not system admin
			$conditions[] = array("organization_id"=>$unitUser['0']['Organization']['id']);
		}
		$this->set('formularios',$formulario->find('all',array('conditions'=>$conditions)));

		// Gerando lista de Unidades da Entidade
		$conditions = array();
		$unitUser = $this->othAuth->getData('unit');
		if ($level >= 100) {
			$conditions[] = array("organization_id"=>$unitUser['0']['Organization']['id']);
		}
		$this->set('units', $this->Assistido->Unit->find('list',
							array('conditions'=>$conditions, 'fields'=>array('id','nome'))));

		// Cidades
		$this->set('estados', $this->Assistido->Cidade->Estado->find('list', array('fields'=>array('id','nome'))));

		if (!empty($this->data)) {
			// Validacao
			if($this->data["Assistido"]["nome"] == null) {
				$_SESSION['mensagem']['error'][] = 'O campo Nome é obrigatório.';
			}
			if($this->data["Assistido"]["unit_id"] == null)	{
				$_SESSION['mensagem']['error'][] = 'Selecione pelo menos uma unidade.';
			}

			if (isset($_SESSION['mensagem']['error'])) {
				return;
			}

			$photo = $this->params["data"]["Assistido"]["photo"];
			if($photo["size"]>0){
				$fileData = fread(fopen($photo["tmp_name"],"r"),$photo["size"]);
				$this->params["data"]["Assistido"]["photo"] = $fileData;
			}else{
				$this->params["data"]["Assistido"]["photo"] = null;
			}


			if ($this->Assistido->save($this->data)) {


				$assistido_id = $this->Assistido->getLastInsertId();

				// Tipo de dados : String, inteiro e data
				$i = 0;
				while (isset($this->data["Fvalor_".$i])) {
					$dataFvalor = array("Fvalor"=>$this->data["Fvalor_".$i]);
					$dataFvalor["Fvalor"]["assistido_id"] = $assistido_id;
					$i++;
					$this->Assistido->Fvalor->create();
					if (!$this->Assistido->Fvalor->save($dataFvalor)) {
						$_SESSION['mensagem']['error'][] = 'Erro ao cadastrar valor! ';
					}
				}
				// Tipo de dados: Textarea
				$i = 0;
				while (isset($this->data["FvalorText_".$i])) {
					$dataFvalorText = array("Fvalortext"=>$this->data["FvalorText_".$i]);
					$dataFvalorText["Fvalortext"]["assistido_id"] = $assistido_id;
					$i++;

					$this->Assistido->Fvalortext->create();
					if (!$this->Assistido->Fvalortext->save($dataFvalorText)) {
						$_SESSION['mensagem']['error'][] = 'Erro ao cadastrar valor! ';
					}
				}

				// Tipo de dados: file
				$i = 0;
				while (isset($this->data["FvalorFile_".$i])) {
					$dataFvalorFile = array("Fvalor"=>$this->data["FvalorFile_".$i]);
					$dataFvalorFile["Fvalor"]["assistido_id"] = $assistido_id;

					// Faz o upload do arquivo para a pasta app/webroot/files
					$extensoes_permitidas = array ('odt', 'ods', 'odp', 'doc',' xls', 'ppt', 'txt',
						 'pdf', 'djvu', 'zip', 'rar', 'tar.gz', 'tar.bz2', 'csv', 'jpg','jpeg','gif','png',
						 'mp3', 'wma');
					$destination = realpath('../../app/webroot/files/') . '/';
					$file = $this->data["FvalorFile_".$i]["file"];
					$extensao = $this->Upload->ext($file['name']);
					$result = $this->Upload->upload($file, $destination,
						 'assist_'.$assistido_id.'_'.$dataFvalorFile["Fvalor"]["fcampo_id"].'.'.$extensao,
						 null,$extensoes_permitidas);

					if (!$result){
						// Salva o nome antigo
						$dataFvalorFile["Fvalor"]["string"] = $file['name'];

						$this->Assistido->Fvalor->create();
						if (!$this->Assistido->Fvalor->save($dataFvalorFile)) {
							$_SESSION['mensagem']['error'][] = 'Erro ao cadastrar valor! ';
						}
					} else {
						// display error
						$errors = $this->Upload->errors;

						// piece together errors
						if(is_array($errors)){ $errors = implode("<br />",$errors); }

						$this->Session->setFlash($errors);
						exit();
					}

					$i++;
				}
				$_SESSION['mensagem']['success'][] = 'Assistido cadastrado com sucesso!';
				$this->redirect('/assistidos/view/'.$assistido_id);
			} else {
				$_SESSION['mensagem']['error'][] = 'Erro ao tentar cadastrar o assistido.';
			}
			$this->redirect('/assistidos/');
		}

	}

	function edit( $id=null) {
		if (!$id) $this->redirect('/assistidos');

		$title = 'Editar assistido';
		$this->set('title', $title);
		$this->set('pageTitle', $title);

		// Recuperando os formularios da entidade
		$formulario = new Formulario();

		$conditions = array();

		//$unitUser = $this->othAuth->getData('unit');
		// Permissao: se pode visualizar todas as unidades
		$group = $this->othAuth->getData('group');
		$level =$group['level'];
		$unitUser = $this->othAuth->getData('unit');
		if ($level >= 100) {  // not system admin
			$conditions[] = array("organization_id"=>$unitUser['0']['Organization']['id']);
		}
		$this->set('formularios',$formulario->find('all',array('conditions'=>$conditions)));

		// Gerando lista de Unidades da Entidade
		$this->set('units', $this->Assistido->Unit->find('list',
							array('conditions'=>$conditions, 'fields'=>array('id','nome'))));

		$this->set('cidades', $this->Assistido->Cidade->find('list'));

		/* Carregando os valores */
		$condition = array('assistido_id'=>$id);
		$fvalores = array();
		$fvalor_t = $this->Assistido->Fvalor->find('all',array('conditions'=>$condition));
		foreach ($fvalor_t as $fv) {
			$fvalores[$fv['Fcampo']['id']] = $fv;
		}
		$fvalort_t = $this->Assistido->Fvalortext->find('all',array('conditions'=>$condition));
		foreach ($fvalort_t as $fv) {
			$fvalores[$fv['Fcampo']['id']] = $fv;
		}

		$this->set('Fvalores',$fvalores);

		$this->Assistido->id = $id;
		if (empty($this->data)) {
			$this->data = $this->Assistido->read();
		} else {

			// Validacao
			if($this->data["Assistido"]["nome"] == null) {
				$_SESSION['mensagem']['error'][] = 'O campo Nome é obrigatório.';
			}
			if($this->data["Assistido"]["unit_id"] == null)	{
				$_SESSION['mensagem']['error'][] = 'Selecione pelo menos uma unidade.';
			}

			unset($this->data['Assistido']['abaVisivel']);

			// Faz o upload da foto para o banco de dados
			$photo = $this->params["data"]["Assistido"]["photo"];
			if($photo["size"]>0){
				$fileData = fread(fopen($photo["tmp_name"],"r"),$photo["size"]);
				$this->params["data"]["Assistido"]["photo"] = $fileData;
			}else{
				unset($this->params["data"]["Assistido"]["photo"]);
			}
			if (!isset($_SESSION['mensagem']['error'])) {
				if ($this->Assistido->save($this->data['Assistido'])) {
					$_SESSION['mensagem']['success'][] = 'Assistido alterado com sucesso!';
	
								// Tipo de dados : String, inteiro e data
					$i = 0;
					while (isset($this->data["Fvalor_".$i])) {
						$dataFvalor = array("Fvalor"=>$this->data["Fvalor_".$i]);
						$dataFvalor["Fvalor"]["assistido_id"] = $this->data['Assistido']['id'];
						$i++;
						$this->Assistido->Fvalor->create();
						if (!$this->Assistido->Fvalor->save($dataFvalor)) {
							$_SESSION['mensagem']['error'][] = 'Erro ao cadastrar valor! ';
						}
					}
								// Tipo de dados: Textarea
					$i = 0;
					while (isset($this->data["FvalorText_".$i])) {
						$dataFvalorText = array("Fvalortext"=>$this->data["FvalorText_".$i]);
						$dataFvalorText["Fvalortext"]["assistido_id"] = $this->data['Assistido']['id'];
						$i++;
	
						$this->Assistido->Fvalortext->create();
						if (!$this->Assistido->Fvalortext->save($dataFvalorText)) {
							$_SESSION['mensagem']['error'][] = 'Erro ao cadastrar valor! ';
						}
					}
	
					// Tipo de dados: file
					$i = 0;
					while (isset($this->data["FvalorFile_".$i])) {
						$dataFvalorFile = array("Fvalor"=>$this->data["FvalorFile_".$i]);
						$dataFvalorFile["Fvalor"]["assistido_id"] = $this->data['Assistido']['id'];
	
						// Faz o upload do arquivo para a pasta app/webroot/files
						$extensoes_permitidas = array ('odt', 'ods', 'odp', 'doc',' xls', 'ppt', 'txt',
							'pdf', 'djvu', 'zip', 'rar', 'tar.gz', 'tar.bz2', 'csv', 'jpg','jpeg','gif','png',
							'mp3', 'wma');
						$destination = realpath('../../app/webroot/files/') . '/';
	
						if (!empty($dataFvalorFile['Fvalor']['file']['name'])) {
							$file = $this->data["FvalorFile_".$i]["file"];
							$extensao = $this->Upload->ext($file['name']);
							$result = $this->Upload->upload($file, $destination,
								'assist_'.$this->data['Assistido']['id'].'_'.$dataFvalorFile["Fvalor"]["fcampo_id"].'.'.$extensao,
								null, $extensoes_permitidas);
	
							if (!$result){
								// Salva o nome antigo
								$dataFvalorFile["Fvalor"]["string"] = $file['name'];
	
								$this->Assistido->Fvalor->create();
								if (!$this->Assistido->Fvalor->save($dataFvalorFile)) {
									$_SESSION['mensagem']['error'][] = 'Erro ao cadastrar valor! ';
								}
							} else {
								// display error
								$errors = $this->Upload->errors;
	
								// piece together errors
								if(is_array($errors)){ $errors = implode("<br />",$errors); }
	
								$this->Session->setFlash($errors);
								exit();
							}
						}
						$i++;
	
					}
	
					$this->redirect('/assistidos/view/'.$id);
				} else {
					$_SESSION['mensagem']['error'][] = 'Erro ao tentar alterar o Assistido.';
				}
			}
		}
		$assistido = $this->Assistido->find(array('`Assistido`.id' => $id));
		$this->set('assistido', $assistido);

		/* Estado */
		$conditions = array();
		$estado_selected = null;
		if (!empty($this->data['Assistido']['cidade_id'])) {
			$estado_selected = $this->data['Cidade']['estado_id'];
			$conditions[] = array('estado_id'=>$estado_selected);
		}
		$this->set('cidades', $this->Assistido->Cidade->find('list', array('conditions'=>$conditions, 'fields'=>array('id','nome'))));
		$this->set('estados', $this->Assistido->Cidade->Estado->find('list', array('fields'=>array('id','nome'))));
		$this->set('estado_selected',$estado_selected);

		if (isset($_SESSION['mensagem']['error'])) {
			return;
		}

	}

	function delete($id) {
		if (!$id) $this->redirect('/assistidos');
		if ($this->Assistido->del($id)) {
			/* Carregando os valores */
			$condition = array('assistido_id'=>$id);
			$fvalores = array();
			$fvalor_t = $this->Assistido->Fvalor->find('all',array('conditions'=>$condition));
			foreach ($fvalor_t as $fv) {
				$idValor = $fv['Fvalor']['id'];
				$this->Assistido->Fvalor->del($idValor);
			}
			$fvalort_t = $this->Assistido->Fvalortext->find('all',array('conditions'=>$condition));
			foreach ($fvalort_t as $fv) {
				$idValor = $fv['Fvalortext']['id'];
				$this->Assistido->Fvalortext->del($idValor);
			}
			$_SESSION['mensagem']['success'][] = 'Assistido excluido com sucesso!';
		} else {
			$_SESSION['mensagem']['error'][] = 'Erro ao tentar excluir o Assistido.';
		}
		$this->redirect('/assistidos');
	}

	function photo ($id) {
		$this->Assistido->id = $id;
		$this->set('assistido', $this->Assistido->read());
	}
}
